﻿// 4554. 老鼠排队.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>


using namespace std;


/*
https://www.acwing.com/problem/content/4557/

给定你若干只老鼠，每只老鼠的重量和速度已知。

请你从中挑选一些老鼠，排成一队，要求：

队伍中的老鼠从前到后体重严格递增。
队伍中的老鼠从前到后速度严格递减。
队伍中的老鼠数量尽可能多。
请你输出满足条件的一支队伍。

输入格式
输入包含若干行，每行包含两个整数 wi,si，表示其中一只老鼠的重量和速度。

输入的老鼠按照输入顺序，依次编号为 1,2,3…。

输出格式
第一行包含整数 n，表示你挑出的老鼠数量。

按照排好队伍后，队伍中从前往后的顺序，依次输出队伍中每只老鼠的编号，每行一个。

如果方案不唯一，则输出任意合理方案均可。

数据范围
输入最多包含 1000只老鼠。
1≤wi,si≤10000。

输入样例：
6008 1300
6000 2100
500 2000
1000 4000
1100 3000
6000 2000
8000 1400
6000 1200
2000 1900
输出样例：
4
4
5
9
7
*/

const int N = 1010;
struct MOUSE {
	int a; int b; int id;
}mouse[N];
int dp[N];
int n;
int a, b;
int pre[N];

bool cmp(const struct MOUSE& a, const struct MOUSE& b) {
	return a.a < b.a;
}

void solve() {
	sort(mouse+1,mouse+1+n,cmp);
	memset(pre, -1, sizeof pre);
	mouse[0].a = 10001;
	int ans = 0; int last = -1;
	for (int i = 1; i <= n; i++) {
		dp[i] = 1; //至少为1
		for (int j = 0; j < i; j++) {
			if (mouse[i].b  <  mouse[j].b && mouse[i].a > mouse[j].a && dp[i] < dp[j]+1) {
				dp[i] =dp[j] + 1;
				pre[i] = j;
			}
		}
		if (ans < dp[i]) {
			ans = dp[i];
			last = i;
		}
	}
	cout << ans << endl;
	vector<int> idarr;
	while (-1 != last) {
		idarr.push_back(mouse[last].id);
		last = pre[last];
	}

	for (int i = idarr.size() - 1; i >= 0; i--) {
		cout << idarr[i] << endl;
	}
}


int main()
{
	while (cin >> a >> b) {
		n++;
		mouse[n].a = a; mouse[n].b = b; mouse[n].id = n;
	}
	solve();

	return 0;
}

 